home *** CD-ROM | disk | FTP | other *** search
/ PCMania 64 / PCMania CD64_1.iso / pcmania / demo64 / graf.pas < prev    next >
Pascal/Delphi Source File  |  1997-12-21  |  4KB  |  202 lines

  1. {$G+}
  2. unit graf;
  3.  
  4. INTERFACE
  5.  
  6. CONST
  7.      VGA :pointer=PTR($a000,$0);
  8.  
  9. TYPE
  10.     color  = record
  11.              r,g,b : byte;
  12.              end;
  13.     paleta = array [0..255] of color;
  14.  
  15. PROCEDURE Set_vga;
  16. PROCEDURE Set_text;
  17. PROCEDURE Cls(color:byte;VAR donde);
  18. PROCEDURE Flip(VAR desde,hasta);
  19. PROCEDURE PutRGB(Color,R,G,B : Byte);
  20. PROCEDURE GetRGB(Color:byte; VAR R, G, B:byte);
  21. PROCEDURE Putpaleta(pal:paleta);
  22. PROCEDURE Getpaleta(VAR pal:paleta);
  23. PROCEDURE EsperaVGA;
  24. PROCEDURE Lee_pcx(Var origen; espacio:word;VAR destino);
  25. PROCEDURE Load_pcx (origen:String;VAR destino);
  26. PROCEDURE Putpixel (X,Y : Integer; Col : Byte; where:word);
  27.  
  28. IMPLEMENTATION
  29.  
  30. PROCEDURE Set_vga; ASSEMBLER;
  31. ASM
  32.    mov ax,13h
  33.    int 10h
  34. END;
  35.  
  36. PROCEDURE Set_text; ASSEMBLER;
  37. ASM
  38.    mov ax,3h
  39.    int $10
  40. END;
  41.  
  42. PROCEDURE Cls(color:byte;VAR donde);ASSEMBLER;
  43. ASM
  44.    les di,donde
  45.    mov al,byte ptr color
  46.    mov ah,al
  47.    db  $66, $c1, $e0, $10
  48.    mov al,byte ptr color
  49.    mov ah,al
  50.    mov cx,16000
  51.    db  $f3,$66,$ab
  52. end;
  53.  
  54. Procedure Flip (VAR desde,hasta); Assembler;
  55. ASM
  56.    mov  bx,ds
  57.    lds  si,desde
  58.    les  di,hasta
  59.    mov  cx,16000
  60.    db   $f3,$66,$a5    {rep movsd}
  61.    mov  ds,bx
  62. end;
  63.  
  64. PROCEDURE PutRGB(Color,R,G,B : Byte);
  65. BEGIN
  66.      Port[$3c8]:=Color;
  67.      Port[$3c9]:=R;
  68.      Port[$3c9]:=G;
  69.      Port[$3c9]:=B;
  70. END;
  71.  
  72. PROCEDURE GetRGB(Color:byte; VAR R, G, B:byte);
  73. BEGIN
  74.      Port[$3c7]:=Color;
  75.      R:=Port[$3c9];
  76.      G:=Port[$3c9];
  77.      b:=Port[$3c9];
  78. END;
  79.  
  80. PROCEDURE PutPaleta (pal:paleta);
  81. VAR
  82.       cont : integer;
  83. BEGIN
  84.       for cont:=0 to 255 do
  85.       PutRGB(cont,pal[cont].r,pal[cont].g,pal[cont].b);
  86. END;
  87.  
  88. PROCEDURE GetPaleta (VAR pal:paleta);
  89. VAR
  90.       cont : integer;
  91. BEGIN
  92.       for cont:=0 to 255 do
  93.       GetRGB(cont,pal[cont].r,pal[cont].g,pal[cont].b);
  94. END;
  95.  
  96. PROCEDURE EsperaVGA; assembler;
  97. asm
  98.     mov dx,3DAh
  99. @l1:
  100.     in al,dx
  101.     and al,08h
  102.     jnz @l1
  103. @l2:
  104.     in al,dx
  105.     and al,08h
  106.     jz  @l2
  107. end;
  108.  
  109.  
  110. PROCEDURE Putpixel (X,Y : Integer; Col : Byte; where:word);ASSEMBLER;
  111. ASM
  112.     mov      ax,where
  113.     mov      es,ax
  114.     mov      bx,[X]
  115.     mov      dx,[Y]
  116.     mov      di,bx
  117.     mov      bx, dx
  118.     shl      dx, 8
  119.     shl      bx, 6
  120.     add      dx, bx
  121.     add      di, dx
  122.     mov      al, [Col]
  123.     mov      es:[di],al
  124. END;
  125.  
  126. Procedure Lee_pcx(Var origen; espacio:word;VAR destino);ASSEMBLER;
  127. VAR
  128.    cont : word;
  129. ASM
  130.    Push DS
  131.    mov ax,espacio
  132.    mov cont,ax
  133.    sub cont,769   {768}
  134.    lds si,origen
  135.    add si,cont
  136.    cld
  137.    mov cx,256
  138.    mov bx,0
  139.    xor ah,ah
  140.    @@divide:
  141.            mov dx,$3c8
  142.            mov al,bl
  143.            out dx,al
  144.            mov dx,$3c9
  145.            lodsb
  146.            shr al,2
  147.            out dx,al
  148.            lodsb
  149.            shr al,2
  150.            out dx,al
  151.            lodsb
  152.            shr al,2
  153.            out dx,al
  154.            add bx,1
  155.            sub cx,1
  156.            jnz @@divide
  157.  
  158.    les di,destino
  159.    lds si,origen
  160.    add si,128
  161.    mov dx,cont
  162.    @bucle:
  163.    lodsb
  164.    cmp al,192
  165.    Jb @norepite
  166.  
  167.    cmp si,dx
  168.    jz @end
  169.  
  170.    sub al,192
  171.    mov cl,al
  172.    lodsb
  173.    jmp @escribe
  174.    @norepite:
  175.    mov cx,1
  176.    @escribe:
  177.    rep stosb
  178.    cmp si,dx
  179.    jz @end
  180.    jmp @bucle
  181.    @end:
  182.    pop ds
  183. END;
  184.  
  185. PROCEDURE Load_pcx (origen:String;VAR destino);
  186. VAR
  187.    pointr  : Pointer;
  188.    fichero : file;
  189.    tamany  : word;
  190. BEGIN
  191.      assign (fichero,origen);
  192.      reset (fichero,1);
  193.      getmem (pointr,filesize(fichero));
  194.      blockread (fichero,pointr^,filesize(fichero),tamany);
  195.      lee_pcx (pointr^,tamany,destino);
  196.      Freemem (pointr,filesize(fichero));
  197.      close (fichero);
  198. end;
  199.  
  200. begin
  201. end.
  202.